#include "Prj_Client.h"
#include "soc_osal.h"
#include "common_def.h"

#include "pinctrl.h"
#include "gpio.h"
#include "pwm.h"
#include "app_init.h"
#include "tcxo.h"

#include "Prj_ctrl.h"

#define BEEP_PIN 9
#define MOTO_PIN 10
#define WATR_PIN 3

uint8_t modify_flag;

uint8_t beep_flag;
uint8_t moto_flag;
uint8_t water_flag;
uint8_t auto_flag;
uint8_t alar_flag;

extern float temp;
extern float humi;
extern uint32_t ad_val;
extern uint32_t ad_val1;
extern uint8_t people_v;

void prj_ctrl_init(void)
{
    pwm_config_t cfg = {20000,
                        20000,
                        0,
                        1,
                        true};
    pwm_config_t cfg1 = {20000,
                         5000,
                         0,
                         1,
                         true};
    uapi_pin_set_mode(MOTO_PIN,PIN_MODE_1);
    uapi_pin_set_mode(BEEP_PIN,PIN_MODE_1);
    uapi_pin_set_mode(WATR_PIN,PIN_MODE_0);
    uapi_pin_set_pull(WATR_PIN,PIN_PULL_TYPE_DISABLE);
    uapi_gpio_set_dir(WATR_PIN,GPIO_DIRECTION_OUTPUT);
    uapi_gpio_set_val(WATR_PIN,GPIO_LEVEL_LOW);
    uapi_pwm_init();
    uapi_pwm_open(1,&cfg);
    uapi_pwm_open(2,&cfg1); 
    uapi_tcxo_delay_ms(1000);
    uint8_t channel_id = 1;
    uapi_pwm_set_group(1, &channel_id, 1);
    uint8_t channel_id1 = 2;
    uapi_pwm_set_group(2, &channel_id1, 1);
}

void prj_ctrl_entry(void)
{
    printf("enter prj_ctrl_entry \r\n");
    prj_ctrl_init();
    while(1)
    {
        if(modify_flag==1 && auto_flag==0)
        {
            if(beep_flag==0)
            {
                uapi_pwm_stop_group(1);
            }
            else
            {
                uapi_pwm_start_group(1);
            }

            if(moto_flag==0)
            {
                uapi_pwm_stop_group(2);
            }
            else
            {
                uapi_pwm_start_group(2);
            }

            if(water_flag==0)
            {
                uapi_gpio_set_val(WATR_PIN,GPIO_LEVEL_LOW);
            }
            else
            {
                uapi_gpio_set_val(WATR_PIN,GPIO_LEVEL_HIGH);
            }

            if(alar_flag==0)
            {
                uapi_pwm_stop_group(1);
            }
            modify_flag=0;
        }
        
        if(auto_flag==1)
        {

            if(ad_val1==1)
            {
                if(people_v==1)
                {
                    beep_flag=1;
                    water_flag=0;
                    uapi_pwm_start_group(1);
                    uapi_gpio_set_val(WATR_PIN,GPIO_LEVEL_LOW);
                }
                else
                {
                    water_flag=1;
                    beep_flag=0;
                    uapi_pwm_stop_group(1);
                    uapi_gpio_set_val(WATR_PIN,GPIO_LEVEL_HIGH);
                }
            }
            else
            {
                beep_flag=0;
                water_flag=0;
                uapi_pwm_stop_group(1);
                uapi_gpio_set_val(WATR_PIN,GPIO_LEVEL_LOW);
            }

            if(ad_val>600)
            {
                beep_flag=1;
                moto_flag=1;
                uapi_pwm_start_group(1);
                uapi_pwm_start_group(2);
            }
            else if(ad_val<600 && ad_val1==1)
            {
                moto_flag=0;
                uapi_pwm_stop_group(2);
            }
            else
            {
                moto_flag=0;
                uapi_pwm_stop_group(2);
                beep_flag=0;
                uapi_pwm_stop_group(1);
            }

        }
        osal_msleep(1000);
    }
}
